﻿namespace BlogsAPI.Sites
{
    using System;
    using System.Text.RegularExpressions;
    using Abstract;

    /// <summary>
    /// Сервис коротких сообщений
    /// </summary>
    [BlogServiceAPI(Description = "http://jujuju.ru", IsMicroblog = true)]
    public class Jujuju : BlogServer
    {
        private static readonly Regex Validation = new Regex(@"^http://(?:\w+\.)?jujuju\.ru", Regexoptions);
        private static readonly Regex ValidationFull = new Regex(@"^http://(?:[-_\w]+\.)?jujuju\.ru/(.*?)(?:/|$)", Regexoptions);
        
        #region interface: BlogServer

        /// <summary>
        /// Конструктор!
        /// </summary>
        public Jujuju()
        {
        }

        /// <summary>
        /// проверка, является ли передаваемый урл чатью этого сервиса
        /// </summary>
        public override Boolean ValidateLink(String sLink)
        {
            return Validation.Match(sLink).Success;
        }


        /// <summary>
        /// Получение ссылки на блог блогера
        /// </summary>
        /// <param name="userName">ник блогера</param>
        public override String GetBlogLink(string userName)
        {
            return String.Format("http://www.jujuju.ru/{0}", userName);
        }

        /// <summary>
        /// проверка, является ли передаваемый урл чатью этого сервиса
        /// </summary>
        /// <param name="sLink">ссылка для проверки</param>
        /// <param name="userName">Имя пользователя на блогохостинге</param>
        /// <param name="bType">Тип блога - сообщество или блог</param>
        public override Boolean ValidateLink(String sLink, out String userName, out BlogType bType)
        {
            bType = BlogType.Unknown;
            userName = String.Empty;
            Match m = ValidationFull.Match(sLink);
            if (m.Success)
            {
                bType = BlogType.User;
                userName = m.Groups[1].ToString();
            }
            return m.Success;
        }

        /// <summary>
        /// Получение ссылки на блог блогера
        /// </summary>
        /// <param name="userName">ник блогера</param>
        /// <param name="btype">Тип блога - сообщество или блог</param>
        public override String GetBlogLink(string userName, BlogType btype)
        {
            return GetBlogLink(userName);
        }

        /// <summary>
        /// Получение ссылки на RSS блогера - берем старым способом... парся страницу целиком
        /// </summary>
        /// <param name="UserName">ник блогера</param>
        /// <remarks>Неработает если имя пользователя русское, тогда нужен номер</remarks>
        public override String GetRssLink(string UserName, BlogType btype)
        {
            return String.Format("http://www.jujuju.ru/statuses/user_timeline/{0}.rss", UserName);
        }

        #endregion
    }
}